package com.lin.cloud.disk.service;


import com.lin.cloud.disk.common.entity.request.AccountRequestDTO;
import com.lin.cloud.disk.entity.dto.DirectoryAndFileDTO;
import com.lin.cloud.disk.entity.dto.LogicDeleteStatusDTO;
import com.lin.cloud.disk.entity.pojo.File;
import com.lin.cloud.disk.entity.request.CountTotalSizeRequest;
import com.lin.cloud.disk.entity.request.file.*;
import com.lin.cloud.disk.entity.response.*;

import java.util.List;

/**
 * 文件服务类
 * @author ljc
 * @date 2021/2/3 16:45
 */
public interface IFileService {


    /**
     * 获取用户文件
     *
     * @param request
     * @return
     */
    List<File> getFileList(GetUserFileRequest request);

    /**
     * 通过Id更新文件
     * @param file
     */
    void updateById(File file);

    /**
     * 创建文件
     * @param file
     */
    void createFile(File file);


    /**
     * 获取正在上传的文件
     * @param request
     * @return
     */
    List<GetBeingUploadFileResponse> getBeingUploadFile(GetBeingUploadFileRequest request);

    /**
     * 通过文件类型获取文件列表
     * @param request
     * @return
     */
    List<DirectoryAndFileDTO> getFileListByFileType(GetFileListByFileTypeRequest request);

    /**
     * 逻辑删除恢复
     * @param deleteStatusDTO
     * @return
     */
    Integer logicDeleteOrRecover(LogicDeleteStatusDTO deleteStatusDTO);


    /**
     * 通过文件ID删除文件
     * @param fileId
     * @return
     */
    Integer removeFileById(Long fileId);


    /**
     * 统计总文件大小
     * @param request
     * @return
     */
    String countTotalFileSize(CountTotalSizeRequest request);


    /**
     * 获取文件资源分片
     * @param request
     * @return
     */
    List<GetFileResourceZoneResponse> getFileResourceZone(AccountRequestDTO request);

    /**
     * 修改文件名字
     * @param file
     */
    int updateFileName(File file);

    /**
     * 批量移动文件
     * @param request
     */
    void batchMoveFile(BatchMoveFileRequest request);

    /**
     * 搜索文件
     * @param request
     * @return
     */
    List<DirectoryAndFileDTO> searchFile(SearchFileRequest request);

}
